//
//  UITextView+Extension.swift
//  EmotionKeyBoard--01
//
//  Created by FelixYin on 15/7/12.
//  Copyright © 2015年 felixios. All rights reserved.
//

import UIKit

extension UITextView {

   
    //MARK: 插入表情文字
    
    
    func updateTextViewContent (emotionIcon:EmotionIcon) -> Void {
        
        
        if emotionIcon.isRemoveBtn {
            
            //这是textView的协议方法
            
            self.deleteBackward()
            
            return
            
        }
        
        
        //emoji表情
        if let e = emotionIcon.emoji {
            
            self.replaceRange(self.selectedTextRange!, withText:e )
            
            return
            
        }
        
        //插入图片表情
        
        let attach = EmotionIconAttachment()
        
        //记录表情文字
        
        if let c = emotionIcon.chs {
            
            //记录表情文字
            attach.strChs = c
            
            //附件附带的是一张图片
            
            attach.image = UIImage(contentsOfFile: emotionIcon.pngURL!)
            
            let h = self.font!.lineHeight
            
            //设置附件的大小
            
            attach.bounds = CGRect(x: 0, y: -4, width: h, height: h )
            
            
            //创建一个属性字符，将图片转化成属性字符
            
            let imgText = NSAttributedString(attachment: attach)
            
            //获取输入框所有的属性字符，同时创建一个可变属性字符
            
            let textM = NSMutableAttributedString(attributedString: self.attributedText)
            
            //textM.insertAttributedString(attrString: imgText, atIndex: textView.)
            
            //将图片转化后的属性字符添加到文本中
            textM.replaceCharactersInRange(self.selectedRange, withAttributedString: imgText)
            
            
            //统一设置属性字符的字体，包括新添加的图片属性字符(现在转化后的图片也属于文字)
            
            textM.addAttributes([NSFontAttributeName : self.font!], range: NSMakeRange(0, textM.length))
            
            //        textM.addAttribute("NSFontAttributeName", value: textView.font!, range: NSMakeRange(0, textM.length))
            
            
            //记录光标位置
            
            let range = self.selectedRange
            
            
            self.attributedText = textM
            
            //回复光标的位置(length表示选中的长度)
            
            self.selectedRange = NSRange(location: range.location+1, length: 0)
            
        }
        
        
    }
    
    
    //MARK: 对attributeText中图片文字转化成字符串
    
    
    func invokeAttachementIntextView () ->String {
    
        //创建一个可变字符，替换图片属性字符
        var strM = String()
        
        
        //此遍历器会分类遍历，如果是纯字符（字符有一个范围），只会遍历一次，如果有表情图片字符的话（NSAttachment）会单独遍历
        
        self.attributedText.enumerateAttributesInRange(NSMakeRange(0, self.attributedText.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (dict, range, UnsafeMutable) -> Void in
            
            //判断是否是NSAttachment(就为了把表情图片筛选出来,替换成文字)
            
            if let atta = dict["NSAttachment"] as? EmotionIconAttachment {
                
                print(atta.strChs)
                
                //如果atta.strChs为空的话，追加一个空子符
                
                strM += atta.strChs ?? ""
                
                
            }else{
                
                //如果是字符的话
                
                strM += (self.attributedText.string as NSString).substringWithRange(range)
                
            }
            
        }
        
        
        print(strM)
        
        //返回转换好的字符串
        
        return strM
        
     }

    
}


